package cn.yogehaoren.badfox.core;

import cn.yogehaoren.badfox.struct.Request;

import java.io.Serializable;
import java.util.concurrent.TimeUnit;

/**
 * 定义系统队列的基本接口，可自由选择实现，只要符合规范就行。
 */
public interface BadFoxQueue extends Serializable {

    Request bPop(String crawlerName, long time, TimeUnit timeUnit);

    /**
     * 阻塞式出队一个请求
     * @param crawlerName --
     * @return --
     */
    Request bPop(String crawlerName);
    /**
     * 入队一个请求
     * @param req 请求
     * @return --
     */
    boolean push(Request req);
    /**
     * 任务队列剩余长度
     * @param crawlerName --
     * @return num
     */
    long len(String crawlerName);

    /**
     * 判断一个URL是否处理过了
     * @param req --
     * @return --
     */
    boolean isProcessed(Request req);

    /**
     * 记录一个处理过的请求
     * @param req --
     */
    void addProcessed(Request req);

    /**
     * 目前总共的抓取数量
     * @param crawlerName --
     * @return num
     */
    long totalCrawled(String crawlerName);

    /**
     * 清除抓取记录
     * @param crawlerName --
     */
    void clearRecord(String crawlerName);
}
